import { wechatWorkMessageReader } from './wechatWorkMessageReader.js';
import { screen } from '@nut-tree/nut-js';
import path from 'path';
import { fileURLToPath } from 'url';
import { writeFile } from 'fs/promises';

// 获取当前目录路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 消息处理器函数，用于处理读取到的新消息
async function processNewMessage(message) {
  try {
    console.log('处理新消息:', {
      timestamp: message.timestamp,
      position: message.position
    });

    // 实际项目中可以根据需要实现各种处理逻辑
    
    // 1. 保存截图到文件
    const screenshotPath = path.join(__dirname, `../message_screenshots/${Date.now()}_message.png`);
    await screen.capture(screenshotPath, message.screenshot);
    console.log(`消息截图已保存至: ${screenshotPath}`);

    // 2. 记录消息日志
    const logEntry = {
      timestamp: message.timestamp,
      position: message.position,
      screenshotPath: screenshotPath
    };

    const logFilePath = path.join(__dirname, '../message_logs/message_log.json');
    try {
      // 读取现有日志
      let existingLogs = [];
      try {
        const existingData = await writeFile(logFilePath, '');
        existingLogs = JSON.parse(existingData || '[]');
      } catch (error) {
        // 如果文件不存在或解析失败，创建新数组
        existingLogs = [];
      }

      // 添加新日志并写入文件
      existingLogs.push(logEntry);
      await writeFile(logFilePath, JSON.stringify(existingLogs, null, 2));
      console.log(`消息日志已更新`);
    } catch (logError) {
      console.error('保存消息日志失败:', logError);
    }

    // 3. 可以添加更多处理逻辑，例如：
    // - 使用OCR技术提取消息文本
    // - 根据消息内容触发特定操作
    // - 将消息转发到其他系统

  } catch (error) {
    console.error('处理消息时出错:', error);
  }
}

// 自定义配置函数
function customConfigureReader(reader) {
  // 自定义配置参数
  reader.config = {
    ...reader.config,
    wechatWorkIconTemplate: './src/assets/wechat-work-icon.png', // 确保此文件存在
    newMessageIconTemplate: './src/assets/new-message-icon.png', // 确保此文件存在
    messageItemRegion: { width: 280, height: 50 }, // 根据实际界面调整
    messageContentRegion: { x: 320, y: 80, width: 750, height: 550 }, // 根据实际界面调整
    confidenceThreshold: 0.85,
    retryAttempts: 5,
    retryDelayMs: 800
  };
  return reader;
}

// 主演示函数
async function runWechatWorkDemo() {
  try {
    console.log('==== 企业微信消息读取演示 ====');
    
    // 步骤1: 初始化消息读取器
    console.log('1. 初始化消息读取器...');
    const isInitialized = await wechatWorkMessageReader.init();
    
    if (!isInitialized) {
      console.error('初始化失败，无法继续演示');
      return;
    }

    // 步骤2: 自定义配置（可选）
    console.log('2. 配置消息读取器...');
    const configuredReader = customConfigureReader(wechatWorkMessageReader);

    // 步骤3: 定位并激活企业微信
    console.log('3. 定位企业微信窗口...');
    const isWechatActive = await configuredReader.locateAndActivateWechatWork();
    
    if (!isWechatActive) {
      console.warn('警告: 未找到企业微信窗口，请确保企业微信已打开');
      console.warn('提示: 可以手动打开企业微信，然后按回车键继续');
      
      // 等待用户确认
      process.stdin.resume();
      await new Promise(resolve => process.stdin.once('data', resolve));
    }

    // 步骤4: 开始监控新消息（这里设置为演示模式，只运行30秒）
    console.log('4. 开始监控新消息（演示模式，将在30秒后自动停止）...');
    console.log('提示: 在此期间可以向企业微信发送一些测试消息');
    
    // 启动监控
    const monitorPromise = configuredReader.startMonitoring(3000); // 每3秒检查一次
    
    // 设置超时，30秒后停止监控
    setTimeout(async () => {
      console.log('\n演示时间结束，正在停止监控...');
      await configuredReader.stopMonitoring();
      console.log('监控已停止');
      console.log('\n==== 演示结束 ====');
      console.log('提示: 实际应用中，可以通过配置更长的监控时间或实现自定义的停止机制');
      process.exit(0);
    }, 30000);

    // 等待监控结束
    await monitorPromise;

  } catch (error) {
    console.error('演示过程中发生错误:', error);
  }
}

// 运行演示
runWechatWorkDemo();

// 处理终止信号
process.on('SIGINT', async () => {
  console.log('\n接收到终止信号，正在停止...');
  await wechatWorkMessageReader.stopMonitoring();
  console.log('程序已退出');
  process.exit(0);
});

// 注意事项说明：
// 1. 本演示需要准备企业微信图标和新消息图标的模板文件
// 2. 实际使用时，需要根据企业微信的界面布局调整区域参数
// 3. 对于更精确的消息内容提取，建议集成OCR库
// 4. 在生产环境中，请考虑添加错误处理和日志记录机制